当前位置: 首页 > news >正文

网站建设0doit网上销售都有哪些平台

网站建设0doit,网上销售都有哪些平台,国外wordpress移动主题,网站的建设及维护的费用是什么? 工厂模式的目的是将创建对象的具体过程隐藏起来,从而达到更高的灵活性 工厂模式分为:简单工厂模式、工厂方法模式、抽象工厂模式; 为什么? 在Java中,万物皆是对象,我们在使用的时候…

是什么?

工厂模式的目的是将创建对象的具体过程隐藏起来,从而达到更高的灵活性

工厂模式分为:简单工厂模式、工厂方法模式、抽象工厂模式

为什么?

在Java中,万物皆是对象,我们在使用的时候这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,那么所有new的地方都需要修改一遍,这明显违背了设计原则中的开闭原则,如果我们使用工厂来生产对象,那么我们只需要和工厂打交道就好了,彻底和对象解耦,如果要更换对象,直接在工厂中更换该对象即可,达到了与该对象解耦的目的,因此工厂模式最大的优点就是:解耦

简单工厂模式

简单工厂不是一个设计模式,它更像是一种编码习惯

结构

抽象产品:定义了产品的规模,描述了产品的主要特性和功能。

具体产品:实现或者继承抽象产品的子类。

具体工厂:提供了创建产品的方法,调用者通过该方法来获取产品。

实现

产品类:

public class Car {  //汽车父类private String getName;}
public class Tesla extends Car{   //子类-特斯拉汽车public Tesla() {System.out.println("()=>制造特斯拉汽车");}
}
public class Benz extends Car{  //子类-奔驰汽车public Benz() {System.out.println("()=>制造奔驰汽车");}
}

工厂类及用户使用:

public class SimpleFactory {/*** 。模拟简单工厂模式* */public Car getCar(String type){    //汽车“生产间”=》简单工厂if ("Benz".equals(type)){return new Benz();}if ("Tesla".equals(type)){return new Tesla();}return new Car();}
}
public class Customer {//消费者直接调用的是工厂而非对象本身,这样就将用户和创建对象的过程隔离开来了public static void main(String[] args) {SimpleFactory simpleFactory = new SimpleFactory();simpleFactory.getCar("Benz");}
}

优缺点

我们会发现,在简单工厂模式中,提供了专门的工厂类来帮助我们创建对象,实现了对象创建和用户使用的职责分离,客户端不需要知道所创建的产品类名以及创建过程只需要知道具体产品类所需要的参数即可,通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性;

但是这样做也是不符合“开闭原则的”,如果我们这个时候需要再添加一个BMW汽车,那么同样的需要去修改我们的工厂类,在产品类型较多的时候,有可能造成工厂逻辑过于复杂,不利于系统的横向扩展和维护,并且工厂类集中了所有产品的创建逻辑,如果不能正常工作那么整个系统都会受到影响

为了解决简单工厂出现的问题,引入了我们的工厂方法模式

工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象,工厂方法使一个产品类的实例化延迟到其工厂的子类;

结构

抽象工厂:提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品;

具体工厂:主要是实现抽象工厂中的抽象方法,完成具体产品的创建;

抽象产品:定义了产品的规范,描述了产品的主要特性和功能;

具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应;

实现

产品类:

public class Car {// 产品父类}public class Benz extends Car{  //子类产品public Benz() {System.out.println("()=>制造奔驰汽车");}
}
public class Tesla extends Car{   //子类产品2public Tesla() {System.out.println("()=>制造特斯拉汽车");}
}

抽象工厂

public interface AbstractFactoryInterface {  //抽象工厂Car createCar();
}

具体工厂及用户使用

public class BenzFactory implements AbstractFactoryInterface{  //具体子类工厂@Overridepublic Car createCar() {return new Benz();}
}public class TeslaFactory implements AbstractFactoryInterface{  //具体子类工厂2@Overridepublic Car createCar() {return new Tesla();}
}
public class Customer {   //用户类public static void main(String[] args) {Car car = new BenzFactory().createCar();Car car2 = new TeslaFactory().createCar();}
}

那么我们这个时候还需要添加一个BMW车的话,只需要创建一个BMW类去继承Car,并且再去创建一个BMW的工厂去实现抽象工厂即可,不需要去修改原来的代码,问题即得到解决;

优缺点

用户只需要知道具体工厂的名称即可得到所要的产品,也不需要知道产品具体的类和创建过程,在系统增加新的产品的时候只需要添加具体产品类和对应具体工厂类,无需对源代码进行任何修改,满足开闭原则;

但是每增加一个产品就需要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度;

抽象工厂模式

我们前面介绍的工厂方法模式中考虑的是一类产品的生产,如车厂只生产车,畜牧场只生产动物;

这些工厂只生产同种类的产品,也就是说工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂都是综合型的工厂,能够生产多等级的产品,例如一个畜牧场它不仅生产动物,还生产饲料粮食,汽车厂不仅生产汽车,还生产发动机、汽车配饰等等;

因此抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族如下:横轴是产品等级,也就是同一类产品,纵轴是产品族,也就是同一品牌的产品(产自同一个工厂);

也就是说它是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构;

抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可以生产多个等级的产品;

结构

抽象工厂:提供了创建产品的接口,它包含多个创建产品的方法,可以创建多个不同等级的产品;

具体工厂:主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建;

抽象产品:定义了产品的规模,描述的产品的主要特性和功能,抽象工厂模式中有多个抽象产品;

具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它与具体工厂之间是多对一的关系;

实现

也就是说我们现在车厂不仅要生产车,还要生产车的配饰、配件等等;

抽象产品及具体产品

public class Engine {public Engine() {}
}public class V12Engine extends Engine{public V12Engine() {System.out.println("这是V12发动机");}
}public class V8Engine extends Engine{public V8Engine() {System.out.println("这是V8发动机");}
}public class Acc {public Acc() {}
}
public class Cowhide extends Acc{public Cowhide() {System.out.println("这是牛皮坐垫");}
}public class Common extends Acc{public Common() {System.out.println("这是普通坐垫");}
}

抽象工厂

public interface AbstractFactory {//抽象工厂,定义创建具体工厂的规范Acc createAcc();Engine createEngine();
}

具体工厂

public class TeslaFactory implements AbstractFactory{//不同的具体产品根据自己的生产需求去创建不同的对象@Overridepublic Acc createAcc() {return new Cowhide();}@Overridepublic Engine createEngine() {return new V12Engine();}
}public class BMWFactory implements AbstractFactory{@Overridepublic Acc createAcc() {return new Common();}@Overridepublic Engine createEngine() {return new V8Engine();}
}

用户

public class Customer {public static void main(String[] args) {TeslaFactory teslaFactory = new TeslaFactory();teslaFactory.createEngine();teslaFactory.createAcc();System.out.println("————————————————————————");BMWFactory bmwFactory = new BMWFactory();bmwFactory.createAcc();bmwFactory.createEngine();}
}

 优缺点

当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象;

但是当产品组中需要增加一个新的产品时所有的工厂类都需要进行修改;

例如我如果想要再添加一个空调这个产品,不仅需要多一个空调的产品族,并且在抽象工厂中还需要添加一个创建空调的方法;

http://www.dt0577.cn/news/7732.html

相关文章:

  • 北京微网站建设设计服务百度搜索关键词排名查询
  • 山西网站制作公司哪家好网络项目免费的资源网
  • 更合高明网站建设收录平台
  • 山西网站建设多少钱海外独立站
  • 生物制药公司网站建设比百度好用的搜索引擎
  • 义乌1688网站网页设计通州优化公司
  • 小程序开发网站设计制作淘宝指数
  • 宁波房产信息网官方网站seo网站优化方案摘要
  • 58同城给做网站搜狗搜索引擎优化指南
  • 网站建设需要做什么准备工作最近热搜新闻事件
  • 做营销型网站多少钱静态网站模板
  • 谈谈网站建设会有哪些问题南沙seo培训
  • 内网建设网站需要什么条件北京关键词优化报价
  • 手机端首页设计福州seo公司
  • 做网站需要购买地域名吗优化排名推广关键词
  • 珍岛做网站怎么样网络软文推广平台
  • 网站设计模式有哪些四川省人民政府官网
  • 软件开发好做吗惠州seo按天计费
  • 网站前期准备工作网页开发公司
  • 深圳鼎诚网站建设信息流广告是什么意思
  • 淄博网站建设哪家好无锡网站建设优化公司
  • 温州建设网站制作数据分析培训机构哪家好
  • yellow片观看完整版广东网站seo
  • 公司网站怎么做百度竞价广州专门做seo的公司
  • 做网站做58好还是赶集好整站优化的公司
  • c2c电子商务网站的建站目的排名优化推广
  • 提供网站建设课程代码百度指数的网址是什么
  • 网站建设前期准备方案大数据精准获客软件
  • 网站备案费一般是多少seo流量优化
  • 房产网手机版网站建设目标seo技巧与技术