Java设计开发模式

java开发设计模式
java开发设计模式2

  1. 单例模式

    是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类。一个类只有一个实例,即一个类只有一个对象实例。

    package design.pattern;

    public class Singleton {

        private static Singleton singleton;

        private Singleton() {}

        public static Singleton getInstance() {

            if (singleton == null) {

                synchronized (Singleton.class) {

                    singleton = new Singleton();

                }

            }

            return singleton;

        }

    }
java开发中常用的几种设计模式及代码例子
  1. 工厂模式

    根据需要返回我们的对象。应用比较熟悉的场景就是spring配置文件了。

    package design.pattern;

    public class MyFactory {

    public static final int TYPE_MI = 1;// 大米

    public static final int TYPE_YU = 2;// 油

    public static final int TYPE_SC = 3;// 蔬菜

    public static Food getFoods(int foodType) {

    switch (foodType) {

    case TYPE_MI:

    return new DaMi();

    case TYPE_YU:

    return new You();

    case TYPE_SC:

    default:

    return new ShuCai();

    }

    }

    }

    abstract class Food {

    }

    class DaMi extends Food {

    }

    class You extends Food {

    }

    class ShuCai extends Food {

    }
java开发中常用的几种设计模式及代码例子
  1. 适配器模式

    将一个类的接口转换成客户希望的另外一个接口。通俗地讲,就是在2个类之间做了一个衔接。比如你在调用A类的doSomething方法,实际上内部实现调用了B类的doSomething方法。

    package design.pattern;

    public class MyAdapter {

    private MyAdapterImpl adapterImpl;

    public MyAdapter(MyAdapterImpl myAdapterImpl) {

    this.adapterImpl = myAdapterImpl;

    }

    public void doSomething() {

    adapterImpl.doSomething();

    }

    public static void main(String args[]) {

    new MyAdapter(new MyAdapterImpl()).doSomething();

    }

    }

    class MyAdapterImpl {

    public void doSomething() {

    }

    }
java开发中常用的几种设计模式及代码例子
  1. 代理模式

    它的定义是:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。Java的反射机制,很多地方就用了代理模式来实现。

    package design.pattern;

    import java.lang.reflect.InvocationHandler;

    import java.lang.reflect.Method;

    import java.lang.reflect.Proxy;

    public class DynamicProxyMain {

    public static void main(String[] args) {

    Person smallPerson = new Child();

    Person proxyBuyHouse = (Person) Proxy.newProxyInstance(Person.class.getClassLoader(),

    new Class[] { Person.class }, new DynamicProxyHandler(smallPerson));

    proxyBuyHouse.eat();

    }

    }

    interface Person {

    void eat();

    }

    class Child implements Person {

    @Override

    public void eat() {

    // 小孩吃什么

    System.out.println("eating");

    }

    }

    class DynamicProxyHandler implements InvocationHandler {

    private Object object;

    public DynamicProxyHandler(final Object object) {

    this.object = object;

    }

    @Override

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

    System.out.println("调用前日志监控");

    Object result = method.invoke(object, args);

    System.out.println("调用后日志监控");

    return result;

    }

    }
java开发中常用的几种设计模式及代码例子
  1. 监听模式

    当事件源触发某种行为,会自动执行事件监听器里面相应的方法。

    Java监听模式右三个部分组成:事件源、事件对象、事件监听器。

    package design.pattern;

    public class ListenerTest {

    public static void main(String[] args) {

    MyListener myListener = new MyListener();

    MyPerson person = new MyPerson();

    person.addEatListener(myListener);

    person.eat();

    }

    }

    //事件源

    class MyPerson{

    private Listener listener;//监听器引用

    //给事件源添加监听器

    public void addEatListener(Listener listener) {

    this.listener = listener;

    }

    public void eat() {

    //吃了很多

    if(listener != null) {

    Event event=new Event() ;

    event.setPerson(this);

    listener.isThinking(event);//监听吃饭时,想了什么

    }

    }

    }

    //事件

    class Event {

    private MyPerson person;// 事件源的引用

    public MyPerson getPerson() {

    return person;

    }

    public void setPerson(MyPerson person) {

    this.person = person;

    }

    }

    interface Listener {

    public void isThinking(Event event);

    }

    class MyListener implements Listener {

    @Override

    public void isThinking(Event event) {

    System.out.println(" is isThinking many things !");

    }

    }
java开发中常用的几种设计模式及代码例子
  1. 装饰器模式

    简单说就是不改变现有类的结构前提下,扩展它的功能。用别的类来增加原有类的功能。

    package design.pattern;

    public class MyDecorator {

    public static void main(String[] args) {

    Animal animal= new SmallDog(new Pet());

    animal.eat();

    }

    }

    interface Animal {

    public void eat();

    }

    class Pet implements Animal {

    @Override

    public void eat() {

    System.out.println("eat food");

    }

    }

    class Dog implements Animal{

    protected Animal animal;

    public Dog(Animal animal) {

    this.animal = animal;

    }

    @Override

    public void eat() {

    this.animal.eat();

    }

    }

    class SmallDog extends Dog{

    public SmallDog(Animal animal) {

    super(animal);

    }

    public void eat() {

    System.out.println("eat other food ");

    this.animal.eat();

    }

    }
java开发中常用的几种设计模式及代码例子
java开发中常用的几种设计模式及代码例子

设计模式的六大原则

1、开闭原则(Open Close Principle)

开闭原则就是对功能扩展开放,对修改代码关闭。系统扩展功能是,不需要修改原来的代码,只需新增代码便可。

2、里氏代换原则(Liskov Substitution Principle)

里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,能使用父类的地方一定可以使用子类替代。 LSP是继承复用的基石,里氏代换原则是对“开-闭”原则的补充。

3、依赖倒转原则(Dependence Inversion Principle)

是开闭原则的基础,具体内容:实现接口编程,依赖于抽象类或接口而不依赖于具体类,系统功能扩展时可以使用具体类扩展。

4、接口隔离原则(Interface Segregation Principle)

使用多个隔离的接口,比使用单个接口要好,原则是:降低依赖,降低耦合。

5、迪米特法则(最少知道原则)(Demeter Principle)

最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

原则是尽量使用合成/聚合的方式,而不是使用继承。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351