簡單工廠模式
一個抽象產品類,可以派生出多個具體產品類;
一個具體工廠類,可以創建多個具體產品的實例。
抽象產品類定義
public abstract class Sender {
void send(){
};
}
具體產品類定義
郵件產品類
public class MailSender extends Sender{
public void send(){
System.out.println("Mail Sender!");
}
}
短信產品類
public class SmsSender extends Sender{
public void send(){
System.out.println("Sms Sender!");
}
}
簡單工廠類
public class SimpleFactory {
public static MailSender createMailSender(){
return new MailSender();
}
public static SmsSender createSmsSender(){
return new SmsSender();
}
}
測試類
public class SimpleFactoryTest {
public static void main(String[] args) {
Sender mailSender = SimpleFactory.createMailSender();
mailSender.send();
Sender smsSender = SimpleFactory.createSmsSender();
smsSender.send();
}
}
工廠方法模式
一個抽象產品類,可以派生出多個具體產品類;
一個抽象工廠類,可以派生出多個具體工廠類;
每個具體工廠類只能創建一個具體產品類的實例。
抽象產品類定義
public abstract class Fruit {
void print(){
};
}
具體產品類定義
public class Apple extends Fruit{
public void print(){
System.out.println("apple");
}
}
public class Pear extends Fruit{
public void print(){
System.out.println("pear");
}
}
工廠方法抽象類定義
public abstract class Factory {
abstract Fruit create();
}
public class AppleFactory extends Factory{
public Fruit create(){
return new Apple();
}
}
public class PearFactory extends Factory{
public Fruit create(){
return new Pear();
}
}
測試類
public class MethodFactoryTest {
public static void main(String[] args) {
Factory appleFactory = new AppleFactory();
Fruit apple = appleFactory.create();
apple.print();
Factory pearFactory = new PearFactory();
Fruit pear = pearFactory.create();
pear.print();
}
}
抽象工廠模式
多個抽象產品類,每個抽象產品類可以派生出多個具體的產品類;
一個抽象工廠類,可以派生出多個具體工廠類;
每個具體工廠類可以創建多個具體產品類的實例。
抽象產品類定義
public abstract class Fruit {
void print(){
};
}
public abstract class Car {
void print(){
};
}
public class Apple extends Fruit{
public void print(){
System.out.println("apple");
}
}
public class Pear extends Fruit{
public void print(){
System.out.println("pear");
}
}
public class Bmw extends Car{
public void print(){
System.out.println("bmw");
}
}
public class Buick extends Car{
public void print(){
System.out.println("buick");
}
}
public abstract class AbstractFactory {
abstract Fruit createFruit();
abstract Car createCar();
}
抽象工廠具體工廠類定義
public class BmwAppleFactory extends AbstractFactory{
public Fruit createFruit(){
return new Apple();
}
public Car createCar(){
return new Bmw();
}
}
public class BuickPearFactory extends AbstractFactory{
public Fruit createFruit(){
return new Pear();
}
public Car createCar(){
return new Buick();
}
}
測試類
public class AbstractFactoryTest {
public static void main(String[] args) {
AbstractFactory bmwAppleFactory = new BmwAppleFactory();
Car car1 = bmwAppleFactory.createCar();
Fruit fruit1 = bmwAppleFactory.createFruit();
car1.print();
fruit1.print();
AbstractFactory buickPearFactory = new BuickPearFactory();
Car car2 = buickPearFactory.createCar();
Fruit fruit2 = buickPearFactory.createFruit();
car2.print();
fruit2.print();
}
}
工廠方法和抽象工廠的區別:
工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。
工廠方法模式的具體工廠類只能創建一個具體產品的實例,而抽象工廠模式可以創建多個。