简单工厂方法
定义为:简单工厂模式又称静态工厂方法模型,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式包含如下角色: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("手机");
}
标签:创建,void,class,工厂,设计模式,public,anamal
From: https://www.cnblogs.com/klearning/p/16969462.html