工厂方法模式

工厂方法模式3(5)

允我心安 提交于 2019-11-28 17:58:52
简单理解:有个工厂对象,工厂对象可以创建多种类型的产品对象。 package Creating; public class FactoryMain { public static void main(String[] args) { ProductA pA = (ProductA) new FactoryA().newProduct(); pA.showProduct(); ProductB pB = (ProductB) new FactoryB().newProduct(); pB.showProduct(); } } interface Factory{ public Product newProduct(); } interface Product{ public void showProduct(); } class ProductA implements Product{ @Override public void showProduct() { System.out.println("生产了A产品!"); } } class ProductB implements Product{ @Override public void showProduct() { System.out.println("生产了B产品!"); } } class FactoryA

Java 中几种常用设计模式

醉酒当歌 提交于 2019-11-28 16:30:43
Java 中一般认为有23种设计模式,当然暂时不需要所有的都会,但是其中常见的几种设计模式应该去掌握。 总体来说设计模式分为三大类: 创建型模式 ,共五种: 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式 ,共七种: 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式 ,共十一种: 策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 1. 单例模式 所谓的单例设计指的是 一个类只允许产生一个实例化对象 。 最好理解的一种设计模式,分为 懒汉式 和 饿汉式 。 1.饿汉式   ——构造方法私有化,外部无法产生新的实例化对象,只能通过static方法取得实例化对象 class Singleton { /** * 在类的内部可以访问私有结构,所以可以在类的内部产生实例化对象 */ private static Singleton instance = new Singleton(); /** * private 声明构造 */ private Singleton() { } /** * 返回对象实例 */ public static Singleton getInstance() { return instance; } public void

设计模式简介及常用应用场景

有些话、适合烂在心里 提交于 2019-11-28 12:48:42
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 常用应用场景: 工厂模式 :IOC就是典型的工厂模式 代理模式 :AOP就是代理实现的 Facade模式 :shiro框架的核心 单例模式 Spring默认就是单例 不变模式 string 八大基本数据类型都是单例 Future 模式 异步调用。即请求时只拿到一个契约,约定以后可以获取这个东西 来源: https://www.cnblogs.com/duguangming/p/11407721.html

详解23种设计模式

不问归期 提交于 2019-11-27 18:00:31
设计模式(Design Patterns)   首先说一下我对设计模式的理解,设计模式是一种在软件内部优化代码的技巧。注意,是代码的内部,也就是在一个局部范围内优化设计。这一点和软件的架构是完全不同的,软件架构是全局的优化,讲的是怎么对软件进行切分以及对切开之后的内容进行重组的一个过程。软件的设计模式强调的是代码,软件架构强调的是结构。在面向对象的编程思想中,这就体现在怎么解决类与类之间的关系。能处理好类与类之间的关系,优化设计就搞好了。下面这段话是软件设计模式的定义:   设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。    毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。设计模式是一代又一代的编程大师总结出来的,我们应该重视,不能束之高阁,应当合理利用。关键是要搞清楚哪种情况用哪种设计模式。 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式

23种设计模式详解

牧云@^-^@ 提交于 2019-11-27 17:59:48
原文链接: http://blog.csdn.net/zhangerqing 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。 1、单一职责原则 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。 2、里氏替换原则(Liskov Substitution Principle) 里氏替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互

设计模式:工厂方法模式

十年热恋 提交于 2019-11-27 15:56:09
工厂模式的意图: 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决: 接口的选择问题 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以 3、屏蔽产品的具体实现,调用者只关心产品的接口。 缺点: 1、每次增加一个产品时,都需要增加一个具体类的对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。 工厂方法模式分为三种: 1、普通工厂模式 共同接口: public interface Sender { public void send(); } 实现类: public class MailSender implements Sender{ @Override public void send() { System.out.println("this is mailsender..."); } } public class SmsSender implements Sender{ @Override public void send() { System.out.println("this is sms sender..."); } } 工厂类: public class SendFactory {

设计模式-工厂方法模式

强颜欢笑 提交于 2019-11-27 12:06:59
定义 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 代码实例 abstract class AbstractPersonFactory { private Person person; // 工厂方法,在具体子类实现 abstract public Person createPerson(); public void boo() { // 具体类型由工厂方法指定 person = createPerson(); person.foo(); } } /** * 工厂子类 */ class StudentFactory extends AbstractPersonFactory { // 决定创建的对象 @Override public Person createPerson() { return new Student(); } // 测试 public static void main(String[] args) { StudentFactory studentFactory = new StudentFactory(); studentFactory.boo(); } } class Person { public void foo() { System.out.println("I am a person"); }

Effective Java总结(一)

三世轮回 提交于 2019-11-27 08:07:52
1.用静态工厂方法代替构造器 类可以提供一个共有的静态工厂方法,它只是一个返回类的实例的静态方法。 下面是一个来自 Boolean (基本类型 boolean 装箱类)的简单示例 这个方法将 boolean 基本 类型值转换成了 olean 对象引用: public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 静态工厂方法的优势: 静态工厂方法与构造器不同的第一大优势在于,它们有名称。例如,构造器 Biginteger (int , int, Random )返回的Biginteger 可能为素数,如果用名为 ginteger.probablePrime 的静态工厂方法来表示,显然更为清楚 。 静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象。静态工厂方法能够为重复的调用返回相同对象,这样有助于类总能严格控制在某个时刻哪些实例应该存在。 静态工厂方法与构造器不同的第三大优势在子,它们可以返回原返回类型的任何子类型的对象。 静态工厂的第四大优势在于,所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值 只要是已声明的返回类型的子类型,都是允许的 返回对象的类也可能随着发行版本的不同而不同。 静态工厂的第五大优势在于

【C++】--抽象工厂模式

只谈情不闲聊 提交于 2019-11-27 03:39:40
本文借鉴Java大佬的 设计模式 ,灰常厉害的大佬 简单工厂模式---> https://blog.csdn.net/aby_byy/article/details/99328126 工厂模式---> https://blog.csdn.net/aby_byy/article/details/99329071 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。在抽象工厂模式中,每一个具体工厂都提供了多个工厂方法用于产生多种不同类型的产品。 A类、B类(抽象产品) 它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法 A1、A2、B1、B2类(具体产品) 它定义具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法。 AbstractFactor类(抽象工厂) 它声明了一组用于创建一族产品的方法createA()、createB(),每一个方法对应一种产品。 D1、D2(具体工厂) 它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。 比如生产 15.6的电脑 ,那么就得是15.6的显示屏 15.6的外壳 始终是同一个产品族的对象! 抽象工厂模式实现:

java|设计模式详解(最全)

人盡茶涼 提交于 2019-11-27 01:30:25
一、设计模式的分类 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 (2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 (3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为