哪有什么岁月静好,不过是有人替你负重前行!

简单工厂方法,工厂方法

简单工厂方法

定义为:简单工厂模式又称静态工厂方法模型,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式包含如下角色:1.Factory(工厂角色) 2.Product(抽象产品角色) 3.ConcreteProduct(具体产品类)
优点 :
1.只需要传入正确的参数,就可以获取需要的对象,无需知道创建细节;
2.实现了对创建实例和使用实例的责任分割 ;
3.无需知道所创建的产品类的类名 , 只需要知道对应产品类的参数即可创建对象实例
缺点 :
工厂类职责过重,如果要增加新的产品,需要修改工厂类的判断逻辑,违背"开闭原则";
7大设计原则:
(1)单一职责原则
(2)接口隔离原则
(3)依赖倒置原则
(4)里氏替换原则
(5)开闭原则
(6)迪米特法则
(7)合成复用原则
7大设计原则,不能全部遵守,也不能不遵,注意平衡功能和系统复杂度,找到最合适的一个点;

public class SimpleFactory {
    public static Object creatAnamal(String anamal){
       if (anamal.equals("猫")){
           Cat cat = new Cat();
           cat.creat(anamal);
           return cat;
       }else {
           Dog dog = new Dog();
           dog.creat(anamal);
           return dog;
       }
    }
}
public interface  Anamal {
    void creat(String anamal);
}
public class Cat implements Anamal{
    @Override
    public void creat(String anamal) {
        System.out.println("创建了猫");
    }
}
public class Dog implements Anamal{
    @Override
    public void creat(String anamal) {
        System.out.println("创建了狗");
    }
}
    @Test
    public void factoryTest(){
        SimpleFactory.creatAnamal("猫");
    }

工厂方法模式

定义:一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
优点:
1.不关心创建细节;
2.符合开闭原则;
缺点 :
1.增加复杂性:类的个数容易过多,增加系统复杂度;在添加新产品时,除了编写新的产品类之外,还要编写该产品类对应的工厂类 ;
2.增加难度:增加了系统抽象性和理解难度;

public abstract class AbstractFactory {
     public abstract Object creatProdoct(String product);
}
public class CreatFactory extends AbstractFactory{
    private Object object;
    @Override
    public Object creatProdoct(String product){
        switch (product){
            case "手机":  Phone phone  = new Phone(); phone.use();
                object = phone;
            break;
            case "电脑":  Computer computer = new Computer(); computer.use();
                object = computer;
                break;
            default:
                break;
        }
        return object;
    }
}
public abstract class Product {
   public abstract void use();
}
public class Phone  extends Product{
    @Override
    public void use() {
        System.out.println("创建了手机,使用手机说明书");
    }
}
public class Computer extends Product{
    @Override
    public void use() {
        System.out.println("创建了电脑,使用电脑说明书");
    }
}
 @Test
    public void factoryTest(){
        AbstractFactory abstractFactory = new CreatFactory();
        abstractFactory.creatProdoct("手机");
    }

posted @ 2022-12-09 17:26  pz_slider  阅读(56)  评论(0)    收藏  举报
/* 粒子吸附*/