设计模式笔记-简单工厂模式,工厂方法模式,抽象工厂模式

Posted SingleOneMan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式笔记-简单工厂模式,工厂方法模式,抽象工厂模式相关的知识,希望对你有一定的参考价值。

设计模式笔记-简单工厂模式,工厂方法模式,抽象工厂模式

文章目录

1.区别

简单工厂模式:根据接收的参数不同来确定返回对象实例,要增加一个新的类别必须要修改代码;简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类

工厂方法模式:是有一组实现了相同接口的工厂类(会增加新的类来扩展,看情况而定,实际上在项目开发中通常还是用简单工厂比较多),一个具体工厂只生产一类具体产品

抽象工厂模式:抽象工厂类;一个具体工厂类可以生产多种具体产品

2.常见写法

简单工厂模式:

public interface Shoe 
    public String getShoeName();

public class ManShoe implements Shoe 
    @Override
    public String getShoeName() 
        return "man shoe";
    

public class WomanShoe implements Shoe 
    @Override
    public String getShoeName() 
        return "woman shoe";
    

public class SimpleFactoty 
    public  Shoe getShoe(String type)
        if("man".equals(type))
            return new ManShoe();
        
       else if("woman".equals(type))
            return new WomanShoe();
        
        else
            return null;
        
    

public class TestSimpleFactoty 
    public static void main(String[] args) 
        SimpleFactoty simpleFactoty=new SimpleFactoty();
        System.out.println(simpleFactoty.getShoe("man").getShoeName());
        System.out.println(simpleFactoty.getShoe("woman").getShoeName());
    

工厂方法模式:

public interface Shoe 
    public String getShoeName();

public class ManShoe implements Shoe 
    @Override
    public String getShoeName() 
        return "man shoe";
    

public class WomanShoe implements Shoe 
    @Override
    public String getShoeName() 
        return "woman shoe";
    

public interface AbstractFactoty 
    public Shoe getShoe();

public class ManShoeFactory implements AbstractFactoty 

    @Override
    public Shoe getShoe() 
        return new ManShoe();
    

public class WoManShoeFactory implements AbstractFactoty 
    @Override
    public Shoe getShoe() 
        return new WomanShoe();
    


public class TestFactory 
    public static void main(String[] args) 
        AbstractFactoty manFactory=new ManShoeFactory();
        System.out.println(manFactory.getShoe().getShoeName());
        AbstractFactoty womanFactory=new WoManShoeFactory();
        System.out.println(womanFactory.getShoe().getShoeName());
    

抽象工厂模式:

public interface Shoe 
    public String getShoeName();

public class ManWorkShoe implements Shoe 
    @Override
    public String getShoeName() 
        return "ManWorkShoe";
    

public class ManRunShoe implements Shoe 
    @Override
    public String getShoeName() 
        return "ManRunShoe";
    

public class WomanRunShoe implements Shoe 
    @Override
    public String getShoeName() 
        return "WomanRunShoe";
    

public class WomanWorkShoe implements Shoe 
    @Override
    public String getShoeName() 
        return "WomanWorkShoe";
    

public interface ShoeFactory 
    public Shoe getRunShoe();
    public Shoe getWorkShoe();

public class ManShoeFactory implements ShoeFactory 
    @Override
    public Shoe getRunShoe() 
        return new ManRunShoe();
    

    @Override
    public Shoe getWorkShoe() 
        return new ManWorkShoe();
    


public class WomanShoeFactory implements ShoeFactory 
    @Override
    public Shoe getRunShoe() 
        return new WomanRunShoe();
    

    @Override
    public Shoe getWorkShoe() 
        return new WomanWorkShoe();
    

public class Test 
    public static void main(String[] args) 
        ShoeFactory manShoeFactor=new ManShoeFactory();
        System.out.println(manShoeFactor.getRunShoe().getShoeName());
        System.out.println(manShoeFactor.getWorkShoe().getShoeName());
        ShoeFactory womanShoeFactor=new WomanShoeFactory();
        System.out.println(womanShoeFactor.getRunShoe().getShoeName());
        System.out.println(womanShoeFactor.getWorkShoe().getShoeName());
    

3.常见框架中的策略模式

1.Spring中的FactoryBean就是典型的工厂方法模式

2.dubbo中的RegistryFactory工厂方法模式

3.netty中的ByteBufAllocator的实现使用了抽象工厂模式

以上是关于设计模式笔记-简单工厂模式,工厂方法模式,抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

关于简单工厂模式工厂方法模式和抽象工厂模式的解析

工厂模式&抽象工厂——HeadFirst设计模式学习笔记

简单工厂模式 - 学习笔记

工厂模式学习笔记

java/android 设计模式学习笔记---抽象工厂模式

简单工厂模式+工厂方法模式+抽象工厂模式