设计模式

作者: Hoklam | 来源:发表于2017-12-25 11:50 被阅读0次

一、单例模式

synchronized

就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问,就是同一时刻一个人只能做一件事并且做完了才能做另外一件事

什么叫线程安全:

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,

就是线程安全的

(1)、懒汉式

synchronized(可添加也可不加),解释如上

public class Singleton{

static Singleton single;

public static synchronized Singleton getInstance() {

     if(single ==null) {

          single =new Singleton();

       }

     return  single;

}

}

(2)、饿汉式    

public class Signle{

    static Signle signle=new Signle();

    public static Signle  getInstance(){

         return signle;

    }

}

饿汉式比懒汉式相对来说粗暴,直接实例化

线程更安全,加载效率更高。


二、工厂模式

提供生成的环境,就是你需要什么就造什么,就类似于餐馆一样,你吃什么菜就炒什么菜

餐馆提供的厨房,厨房负责炒菜,而顾客只需点菜

在代码中我们定义一个接口interface A(厨房),然后定义两个不同类(顾客)分别实现implements接口A,在方法里做不同的事(点不同的菜)

最后提供一个统一入口(餐馆)去访问

定义一个接口 interface

interface DoWork{

public void work();//干什么事

}

定义两个类

Teacher 老师类

class   Teacher implements DoWork{

    public void work(){

       System.out.println("tacher taches student knowlage");

   };

}

Student 学生类

class   Student implements DoWork{

    public void work(){

        System.out.println("flow teacher and listen");

    };

}

公共访问类 Factory

public  class Factory{

写法1

static DoWork getIntance(String flag){

         DoWork doWork=null;

         switch (flag) {

            case "teacher":

                doWork=new Teacher();

            break;

           case "student":

               doWork=new Student();

             break;

      }

           return doWork;

}

写法2

public static DoWork newTeacherIntance() {

          return new Teacher();

}

public static DoWork newStudentIntance() {

         return new Student();

}

}

两种写法都可以,但是写法2能避免写法1参数出错而导致实例化失败从而引起空指针异常

上面写法局限性太大,如果顾客想吃火锅了,这时菜已经上好了,难道换一家再吃?

换一家既不方便也太浪费,怎样解决这个问题既能吃炒菜也能吃火锅呢

引入抽象工厂类

public interface AbstractFactory

{

     Listener listener();

     Read read();

}

interface Listener

{

    void listener();//听

}

interface Read

{

     void read();//读

}

还是定义Student类

public class Student implements AbstractFactory{

@Override

public Listener listener() {

System.out.println("listen  to teacher");

return null;

}

@Override

public Read read() {

System.out.println("read  the book after teacher finishing");

return null;

}

}

思考:在学习英语时,学生听与读是必须的,而对于某些听力能力好的但口语差点人来说,他只想读不想听,认为听是多余的,这时实现AbstractFactory接口重写listener()是否多余呢


三、Builder模式或建造者模式

安卓中最常见的Builder模式运用就是AlertDialog等

当遇到传参个数不固定时,怎么做呢

1、创建MyBuilder类

public class MyBuilder {

String name;

String gride;

int age;

private MyBuilder(MyBuilder.Builder builder){

    this.name=builder.name;

    this.age=builder.age;

    this.gride=builder.gride;

}

public String getName() { return name; }

public void setName(String name) { this.name = name; }

public String getGride() { return gride; }

public void setGride(String gride) { this.gride = gride; }

public int getAge() { return age; }

public void setAge(int age) { this.age = age; }

}

2、创建Builder 参数与MyBulider 参数保持一致

public static class Builder{

String name;

String gride; int age;

public Builder setName(String name){ this.name=name; return this; }

public Builder setAge(int age){ this.age=age; return this; }

public Builder setGride(String gride){ this.gride=gride; return this; }

public MyBuilder builder(){

     return new MyBuilder(this);

}

}

MyBuilder持有Builder的实例,Builder通过setXX()来设定值


四、状态模式


五、装饰模式

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

网友评论

    本文标题:设计模式

    本文链接:https://www.haomeiwen.com/subject/liwkgxtx.html