设计模式

来源:互联网 发布:哪里有淘宝小号买 编辑:程序博客网 时间:2024/06/07 02:52

一、设计模式六大原则

        单一职责原则: adapter做适配的事 Bean做Bean的处理 

       开放封闭原则:像调用jar里面的函数 模块 只能用 不能改

       里氏替换原则:像多态  子类可以复制给父类的引用 反过来 不行

       依赖倒置原则:说了等于没说

       迪米特原则:  说了等于没说

    

       设计模式分为三类:

       创建类型模式:单例、工厂、建造者...

       结构型设计模式:适配器、代理、桥接...

       行为型设计模式:策略、观察者、迭代器...


   1.单例模式

      保证一个类只有一个实例,并提供一个全局访问点   使用场景:项目中共享的数据 消耗资源多的对象 工具类对象

public class Singleton {     private Singleton(){}/* * 饿汉模式 类加载时就完成初始化  获取对象块 没有同步问题 */private static Singleton instance=new Singleton();public static Singleton getInstance(){return instance;}/* * 懒汉模式  */     private static Singleton instance2;          public static synchronized Singleton getInstance2(){    if(instance2==null)    instance2=new Singleton();        return instance2;    }          /*      * 双重检查模式 DCL      */     private volatile static Singleton singleton3;     public static Singleton getInstance3(){     if(singleton3==null){     synchronized(Singleton.class){     singleton3=new Singleton();     }     }     return singleton3;     }          /*      * 静态内部类      */     public static Singleton getInstance4(){     return SingHolder.sholder;     }     private static class SingHolder{     private static final Singleton sholder=new Singleton();          }}


2.简单工厂模式

 又名静态工厂方法模式 这是由一个工厂对象决定创建出哪一种产品类的实例

(1) 抽象产品类

package factory;public abstract class Computer {/* * 产品的抽象方法 由具体的产品类实现 */public abstract void start();}

(2)具体产品类

package factory;public class LenovoCom extends Computer{@Overridepublic void start() {// TODO Auto-generated method stubSystem.out.println("我是联想计算机");}}


(3)工厂类

package factory;public class ComFactory {public static Computer createComputer(String type){Computer mcomp=null;if(type.equals("lenovo"))mcomp=new LenovoCom();else if(type.equals("huawei"))mcomp=new Huawei();return mcomp;}}

(2)客户端调用工厂类

package factory;public class MyComputer {public static void main(String[] args) {// TODO Auto-generated method stubComFactory.createComputer("lenovo").start();;}}

3.观察者模式

 即发布-订阅模式 在项目中经常使用的模式 

 (1)抽象观察者

package observer;public interface Observer {//定义一个更新消息的方法public void update(String message);}
(2)具体观察者
package observer;public class UserWeixin implements Observer{//微信用户private String name;  public UserWeixin(String name){  this.name=name;  }@Overridepublic void update(String message) {// TODO Auto-generated method stubSystem.out.println(name+" - "+message);}}
(3)抽象被观察者

package observer;public interface Subject {/* *  新增订阅者 */public void attach(Observer observer);/* *  删除订阅者 */public void detach(Observer observer);/* *  通知订阅者更新消息 */public void notify(String message);}

(4)具体被观察者模式


package observer;import java.util.ArrayList;import java.util.List;public class SubscriptionSubject implements Subject {//存储订阅公众号的用户private List<Observer> userList=new ArrayList<Observer>();@Overridepublic void attach(Observer observer) {// TODO Auto-generated method stubuserList.add(observer);}@Overridepublic void detach(Observer observer) {// TODO Auto-generated method stubuserList.remove(observer);}@Overridepublic void notify(String message) {// TODO Auto-generated method stubfor(Observer observer:userList){observer.update(message);}}}

  (5)客户端调用

package observer;public class Client {public static void main(String[] args) {// TODO Auto-generated method stubSubscriptionSubject mssubject=new SubscriptionSubject();//用户        UserWeixin user1=new UserWeixin("钟惠华");        UserWeixin user2=new UserWeixin("薛翠英");        UserWeixin user3=new UserWeixin("王大婶");        //订阅公众号        mssubject.attach(user1);        mssubject.attach(user2);        mssubject.attach(user3);                //公众号更新发消息给订阅了的用户        mssubject.notify("周末去小梅沙一浪  message");                //user1 走了 退订了        mssubject.detach(user1);       //公众号更新发消息给订阅了的用户        mssubject.notify("周末去浪啊  message");       }}







    

原创粉丝点击