首页 > 其他分享 >创建型设计模式

创建型设计模式

时间:2022-12-09 17:35:12浏览次数:38  
标签:创建 void class 工厂 设计模式 public anamal

简单工厂方法

定义为:简单工厂模式又称静态工厂方法模型,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式包含如下角色: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

相关文章

  • JavaScript:对象:如何创建对象?
    JS是面向对象的语言,除开基础数据类型,其他所有的数据类型都是对象,包括函数。如何去理解对象,什么是对象呢?举个例子,比如我们将日常生活中见到的猫这种动物,抽象成一个类Cat,这......
  • electron 创建托盘
    托盘import{Tray,Menu}from'electron'leticonTray=null//要创建全局的变量,不然会几秒后消失创建托盘函数asyncfunctioncreateTray(){consttrayMe......
  • 创建数据库表、数据表的类型
    创建数据库表、数据表的类型创建数据库表--目标:创建一个school数据库--创建学生表(列,字段)使用SQL创建--学号int,登陆密码varchar(20),姓名,性别varchar(2),出生日......
  • Django 多对多表关系的两种创建方式
    第一种:自动创建#djangoorm自动帮我们创建第三张表,我的app名字是app01,表名为:app01_book_authors#这种方式可以让Django迅速的帮我们建一张关系表出来,好处是可以通过......
  • 创建springboot过滤器
    springboot过滤器importorg.springframework.core.ParameterizedTypeReference;importorg.springframework.web.context.WebApplicationContext;importorg.springframewo......
  • threeJs 创建文字方式
    一,使用 TextGeometry创建3D文字1.需加载字体配合使用,使用THREE.FontLoader//加载字体loadFont(){returnnewPromise(function(resolve,reject){......
  • Threejs:创建矩阵
     设置顶点创建矩形constgeometry3=newTHREE.BufferGeometry();constvertices=newFloat32Array([-1.0,-1.0,1.0,1.0,-1.0,1.0,1.0,1.0,1.0,......
  • Threejs:创建纹理
    创建纹理//导入纹理constloader=newTHREE.TextureLoader();//加载所需要的纹理图片consttexture1=loader.load('./dist/texture/sea.jpg')constmaterial5......
  • Threejs:创建几何体——图元
     BoxGeometry盒子+MeshBasicMaterialconstgeometry=newTHREE.BoxGeometry(1,1,1);constmaterial=newTHREE.MeshBasicMaterial({color:0x00ff00});const......
  • day1:node安装+项目创建
    一、安装node1、http://nodejs.cn/download/中文网下载node工具,直接下一步式的安装。二、验证安装1、win+r 输入cmd,分别运行一下,node-v  npm-v ......