栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式学习笔记(更新中...)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式学习笔记(更新中...)

最近在学一些设计模式,在学习的过程中,我会将学习笔记记入在此地,和大家分享,这篇文章会随时更新

文章目录
  • 一、设计模式入门
    • 1.1 本章节核心思想:
    • 1.2 问题:
    • 1.3 实现代码

一、设计模式入门 1.1 本章节核心思想:

多用组合,少用继承。

1.2 问题:

模拟鸭子游戏,游戏中会出现各种鸭子,有的鸭子会飞,有的会叫。按照以往的设计模式,我们往往会设计一个鸭子的超类,并让每个鸭子都继承这个类。但是,这样就涉及到一个问题,有的鸭子会叫,有的会飞,有的则不会(比如,像皮鸭)每种鸭子都有它自己的特点,会飞的方式也不一样,但是这需要每种鸭子都需要继承这个类,并且重写里面的会飞和会叫方法,这样,鸭子的种类每多一种,我们都要重写一遍代码,这样的是长不利于日后系统的维护。


上面那种架构,并不符合我们的设计理念,可以将需要改变的地方,从Duck类里分离出来,设计成接口。
下面的设计模式才是我们真正要实现的

1.3 实现代码

Duck抽象类,所有鸭子实例都继承此类

ackage com.geng.domain;

import com.geng.inter.FlyBehavior;
import com.geng.inter.QuackBehavior;


public abstract class Duck{

    FlyBehavior flyBehavior;
    QuackBehavior quackBehavior;

    public Duck(){

    }
    public abstract void display();

    public void  performFly(){
        flyBehavior.fly();
    }

    public void performQuack(){
        quackBehavior.quack();
    }

    public void swim(){
        System.out.println("all duck float");
    }

    public void setFlyBehavior (FlyBehavior flyBehavior){
        this.flyBehavior = flyBehavior;
    }

    public void setQuackBehavior (QuackBehavior quackBehavior){
        this.quackBehavior = quackBehavior;
    }
}

FlyBehavior接口,每一种鸭子的飞行方式,需要实现此接口,然后付给鸭子的实例,在执行过程中可以动态改变鸭子的飞行方式

package com.geng.inter;

public interface FlyBehavior {
    public void fly();
}

QuackBehavior接口,每一种鸭子的叫的方式,需要实现此接口, 然后付给鸭子的实例,在执行过程中可以动态改变鸭子的叫的方式

package com.geng.inter;


public interface QuackBehavior {
    public void quack();
}

FlyBehavior接口的实现类,用于实现一种鸭子的飞行方式, 可以实现多次,添加多种飞行方式

package com.geng.impl;

import com.geng.inter.FlyBehavior;


public class FlyNoWay implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("I can't flying");
    }
}

FlyBehavior接口的实现类2

package com.geng.impl;

import com.geng.inter.FlyBehavior;


public class FlyWithWings implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("I'm flying");
    }
}

QuackBehavior接口的实现类,用于实现一种鸭子的叫的方式,可以实现多次,添加多种叫的方式

package com.geng.impl;

import com.geng.inter.QuackBehavior;


public class MuteQuack implements QuackBehavior {
    @Override
    public void quack() {
        System.out.println("Quack");
    }
}

QuackBehavior接口的实现类2

package com.geng.impl;

import com.geng.inter.QuackBehavior;


public class Squeak implements QuackBehavior {
    @Override
    public void quack() {
        System.out.println("Squeak");
    }
}

鸭子实例,每一种鸭子都需要继承Duck

package com.geng.domain;

import com.geng.impl.FlyWithWings;
import com.geng.impl.MuteQuack;


public class MallardDuck extends Duck{

    public MallardDuck(){
        flyBehavior = new FlyWithWings();
        quackBehavior = new MuteQuack();
    }

    @Override
    public void display() {
        System.out.println("I'm a real Mallard duck");
    }
}
package com.geng.main;

import com.geng.domain.Duck;
import com.geng.domain.MallardDuck;
import com.geng.impl.FlyNoWay;
import com.geng.impl.Squeak;

public class MiniDuckSimulator {
    public static void main(String[] args) {
        Duck mallardDuck = new MallardDuck();
        mallardDuck.performFly();
        mallardDuck.performQuack();
        mallardDuck.display();
        mallardDuck.setFlyBehavior(new FlyNoWay());
        mallardDuck.setQuackBehavior(new Squeak());
        mallardDuck.performFly();
        mallardDuck.performQuack();
        mallardDuck.display();
        mallardDuck.swim();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/532185.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号