【总结】工厂模式
一.简单工厂模式
1.定义
简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。可以根据参数的不同返回不同类的实例。
2.组成
工厂类 抽象产品类 具体产品类
3.实现
//(1)抽象产品类
public abstract class Computer {
/**
* 产品的抽象方法,由具体的产品类去实现
*/
public abstract void start();
}
//(2)具体产品类
public class LenovoComputer extends Computer{
@Override
public void start() {
System.out.println("联想电脑启动");
}
}
//(3)工厂类
public class ComputerFactory {
public static Computer createComputer(String type){
Computer mComputer=null;
switch (type) {
case "lenovo":
mComputer=new LenovoComputer();
break;
case "hp":
mComputer=new HpComputer();
break;
}
return mComputer;
}
}
4.缺点
如果要添加新的类,就需要修改工厂类,违背开放-关闭原则(对扩展开放,对修改关闭)
二.工厂方法模式
1.定义
工厂方法模式,又称工厂模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。
2.组成
抽象工厂 具体工厂 抽象产品 具体产品
3.实现
//抽象产品
abstract class Product{
public abstract void Show();
}
//具体产品
//具体产品A类
class ProductA extends Product{
@Override
public void Show() {
System.out.println("生产出了产品A");
}
}
//具体产品B类
class ProductB extends Product{
@Override
public void Show() {
System.out.println("生产出了产品B");
}
}
//抽象工厂
abstract class Factory{
public abstract Product Manufacture();
}
//具体工厂
class FactoryA extends Factory{
@Override
public Product Manufacture() {
return new ProductA();
}
}
class FactoryB extends Factory{
@Override
public Product Manufacture() {
return new ProductB();
}
}
4.优缺点
优点:符合开-闭原则 新增一种产品时,只需要增加相应的具体产品类和相应的工厂子类即可
缺点:添加新产品时,除了增加新产品类外,还要提供与之对应的具体工厂类,系统类的个数将成对增加,在一定程度上增加了系统的复杂度
三.抽象工厂模式
1.概述
上面的两种模式,一个工厂生产一类产品,但如果一个具体的工厂,生产具体的产品对象,就需要用到抽象工厂模式
2.组成
AbstractProduct:抽象产品族 Product:具体产品 AbstractFactory:抽象工厂 ConcreteFactory:实现了抽象工厂声明的生成抽象产品的方法,生成一组具体产品
3.代码实现
//产品族接口
interface IProduct1 {
public void show();
}
interface IProduct2 {
public void show();
}
//产品实现
class Product1 implements IProduct1 {
public void show() {
System.out.println("这是1型产品");
}
}
class Product2 implements IProduct2 {
public void show() {
System.out.println("这是2型产品");
}
}
//工厂接口
interface IFactory {
public IProduct1 createProduct1();
public IProduct2 createProduct2();
}
//工厂实现
class Factory implements IFactory{
public IProduct1 createProduct1() {
return new Product1();
}
public IProduct2 createProduct2() {
return new Product2();
}
}
public class Client {
public static void main(String[] args){
IFactory factory = new Factory();
factory.createProduct1().show();
factory.createProduct2().show();
}
}
4.抽象工厂模式优缺点
(1)优点:增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”
(2)缺点:产品族新增一个新产品,所有的工厂类都需要改变

浙公网安备 33010602011771号