设计模式

设计模式

1、面向对象设计原则

面向对象的设计原则:开闭原则(对修改关闭,对扩展开发)

2、单例

概述:内存中只能存在一个该类的对象
饿汉式:对象的初始化过程在类加载的时候就已经完成
懒汉式:调用方法的时候再创建对象,需要注意线程安全问题

 

/**

 * 饿汉式:对象的初始化过程在类加载的时候就已经完成

 * 在开发中建议使用

 * @author luo

 *

 */

public classConfiguration {

      

       private static Configuration conf = new Configuration();

       public static Configuration getInstance(){

              return conf;

       }

      

       privateConfiguration(){

       }

}

 

 

/**

 * 懒汉式:调用方法的时候再创建使用

 * 在面试中建议使用

 * @author luo

 *

 */

public classConfiguration {

      

       private static Configuration conf = null;

       public static synchronized Configuration getInstance(){

              if(conf ==null){

                     conf = newConfiguration();

              }

              return conf;

       }

      

       privateConfiguration(){

       }

}

 

 


3、工厂模式

概述
     创建对象的事情,可能比较复杂的,所以创建对象的这个逻辑我们应该定义到专门的一个类里面,这个类专门负责创建各种对象实例,那么这个类就被称为工厂类

简单工厂和工厂模式的区别
     简单工厂:一个工厂可以创建多个对象,如果要添加对象,那应该修改工厂
     工厂模式:一个工厂对应一个对象,换句话说 一个工厂只能创建一个对象,如果我要创建这个对象,第一步应该先创建工厂对象,然后通过工厂对象来创建对象。如果要添加对象,只需要再新增一个工厂即可,更符合开闭原则

比如说,我们现在有很多动物类,猫,狗,猪  ...
        而这些动物有相同的行为,  eat()
        抽取一个共同的父类。动物。
      
        简单工厂模式:
           Animal
                 |--Dog
                 |--Cat
                 
           AnimalFactory
                 public static Animal createAnimal(String type){
                      if("dog".equals(type)){
                            return new Dog();
                      }else if("cat".equals(type)){
                            return new Cat();
                      }else {
                            return null;
                      }
                 }
                 
        工厂方法模式:
           Animal
                 |--Dog
                 |--Cat
                 |--Pig
                 
           AnimalFactory
                 |--DogFactory
                 |--CatFactory
                 |--PigFactory

4、包装设计模式

概述
     对一个已知类,类的原始行为要保留住而且对于某一个方法或者给类增加一些新的内容,这种情况下使用包装设计模式

编写步骤
     1、编写一个类,实现与被包装类相同的接口  或者  继承被包装类
     2、定义一个引用(变量名 ),需要记住被包装对象的引用
     3、定义构造方法,传入被包装类的对象实例
     4、改写需要增强的方法
     5、对于不需要增强的方法,调用原有对象的方法

以下代码是个包装类,包装BufferedReader,增加打印行的功能

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

 

 

public class MyBufferedReader extends BufferedReader{

       private BufferedReader br ;

       private int number= 1;

       public MyBufferedReader(BufferedReader br){

              super(br);

              this.br = br;

       }

      

       public String readLine() throws IOException{

              if(br.readLine() == null)

                     return null;

              return number+++br.readLine();

       }

      

       public static void main(String[] args) throws Exception {

              MyBufferedReader reader = new MyBufferedReader(new BufferedReader(new FileReader("d://giftsstore.log")));

              String line = null;

              while((line=reader.readLine()) != null){

                     System.out.println(line);

              }

       }

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值