博文

目前显示的是标签为“设计模式”的博文

设计模式-建造者模式

图片
        建造者模式,又叫构建者模式,构建器模式等等,定义这里我就不赘述了,网上书上都很多,可以很方便找来看。我为什么不说一遍呢,第一,觉得大部分的定义都描述的不是很易懂,第二,我自己目前还没达到能够下定义的水平。         先来看看代码,然后再给出我的理解。 public class Article { private String title ; private String content ; private String sign ; private Date time ; //省略了getter,setter,toString } public interface ArticleBuilder { void setTitle (String title) ; void buildContent (String title) ; void setTime (Date date) ; Article getResultArticle () ; } public class ConcreteArticleBuilder implements ArticleBuilder { private Article article = new Article() ; @Override public void setTitle (String title) { article .setTitle(title) ; } @Override public void buildContent (String content) { article .setContent(content) ; } @Override public void setTime (Date date) { article .setTime(date) ; } @Override public Article getResultArticl...

设计模式-抽象工厂

图片
        工厂方法模式中,工厂类用于生成一系列对象实例并且以这些对象的父级类型作为返回结果。当有多个这样的工厂,这些工厂之间会生产出一系列不同的对象,这种情况下,我们可以定义一个抽象工厂来描述工厂的行为,即创建一系列对象的方法,再让具体的工厂类继承这个抽象工厂。也可以说是把一个系列的工作抽象出来一个抽象的类型,这个抽象的类型就是抽象工厂。 先来看一下结构图: 下面来看一下具体代码: 定义抽象类型 public interface Animal { void say () ; } public interface Cat extends Animal { } public interface Dog extends Animal { } public interface Duck extends Animal { } 定义抽象工厂接口 public interface AnimalFactory { /** * 抽象工厂方法 * 特点与工厂方法一致: * 创建了一个对象 * 返回类型为一个接口或者抽象类 * 有多个类实现了上述抽象类型 * * @param animalType * @return */ Animal getAnimal (String animalType) ; } 抽象类型的具体类与具体工厂类(US) public class CatUs implements Cat { @Override public void say () { System. out .println( "america cat" ) ; } } public class DogUs implements Dog { @Override public void say () { System. out .println( "america dog" ) ; } } public class DuckUs implements Duck { @Override public...

设计模式-工厂模式

图片
    工厂模式,也叫工厂方法模式,定义一个用于创建对象的接口,可以控制对哪个类进行实例化 public interface Animal { void say(); } public class Cat implements Animal { @Override public void say() { System.out.println("miao miao miao"); } } public class Dog implements Animal { @Override public void say() { System.out.println("wang wang wang"); } } public class Duck implements Animal { @Override public void say() { System.out.println("ga ga ga"); } } public class AnimalFactory { /** * 此方法为工厂方法模式, * 特点为: * 创建了一个对象 * 返回类型为一个接口或者抽象类 * 有多个类实现了上述抽象类型 * @param color * @return */ public Animal getAnimal(String color) { if ("dog".equals(color)) { return new Dog(); } else if ("cat".equals(color)) { return new Cat(); } else if ("duck".equals(color)) { return new Duck(); ...

设计模式-单例模式

        设计模式,通常指GOF的《 设计模式 可复用面向对象软件的基础 》书中提到的面向对象编程23种设计模式,话不多说,先来看一个单例模式。 单例模式,可以保证在系统中单例类只能有一个实例。 接下来我把在网上流行的大部分实现方案以及个人在思考单例模式的实现过程整理如下 方案一: /** * 饿汉式 * 使用时直接使用静态变量,理念不好,不利于扩展 */ public class Singleton { /** * 初始化动作写到静态代码块中是一样的效果 */ public static Singleton instance = new Singleton(); private Singleton() { } } 方案二: /** * 饿汉式 * 使用时调用 getInstance 方法,后期如有需求可直接改动方法实现即可 */ public class Singleton { public static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return instance; } } 方案三: /** * 懒汉式,使用时才初始化 * 线程不安全,单线程环境下可用 */ public class Singleton { public static Singleton instance = null; private Singleton() { } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }   方案四: /** * 懒汉式,使用时才初始化 * 线程安全,方法加锁,效率低 *...

开闭原则的理解

        开闭原则,“软件实体应当对扩展开放,对修改关闭”,是要达到一个状态,而要达到这个状态,就需要在写代码的过程中要想到和做到。。。 提倡开闭原则,其目的是我们在编写代码的时候就要考虑到每个功能模块的潜在的变化的可能性,尽可能的写简短单一功能并且复用性强的模块。 只有在写代码的时候注意到了这些,在重构或者变更的时候,才能做到“对扩展开放,对修改关闭”。 引用一段百度百科中关于开闭原则实现的一段文字: 开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。因此,针对开闭原则的实现方法,一直都有面向对象设计的大师费尽心机,研究开闭原则的实现方式。后面要提到的里氏代换原则(LSP)、依赖倒转原则(DIP)、接口隔离原则(ISP)以及抽象类(Abstract Class)、接口(Interface)等等,都可以看作是开闭原则的实现方法。 这些原则中,大部分都有框架实现了,比如spring中的“依赖倒转”,用这些框架,可以节省大量工作时间,以及优化工程的代码结构。除这些框架之外的,就是在业务逻辑实现的部分,由程序员写代码的部分,如能做到遵循开闭原则,那么该项目质量应该会上升一个等级。 外话,当然项目的评判标准,最重要的还是架构的设计。