【总结】工厂模式

一.简单工厂模式

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)缺点:产品族新增一个新产品,所有的工厂类都需要改变

posted @ 2020-07-31 09:05  mu_阿成  阅读(218)  评论(0)    收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css