您的位置:首页 > 编程语言 > Java开发

java常见的几种设计模式

2017-08-27 18:14 609 查看
设计模式
1、概述
1)设计模式(Design pattern):是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结;
2)分类:
创建型模式(创建对象的): 单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
行为型模式(对象的功能): 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
结构型模式(对象的组成): 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
2、简单工厂模式
1)概述:又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例
2)实现:
public abstract class Animal {
public abstract void eat();
}

public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}

public class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃肉");
}
}

public class AnimalFactory {
public static Animal get(String name){
if(name.equals("Dog")){
return new Dog();
}else if(name.equals("Cat")){
return new Cat();
}else{
return null;
}
}
}

public class Test {
public static void main(String[] args) {
AnimalFactory.get("Cat").eat();
AnimalFactory.get("Dog").eat();
}
}


3、工厂方法模式
1)概述:工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现
2)实现:
public interface AnimalFactory { public abstract Animal get() ; } -------------------------- public class DogFactory implements AnimalFactory { @Override public Animal get() { return new Dog(); } } ------------------------------------- AnimalFactory af = new DogFactory() ; Animal animal = af.get() ; animal.eat() ; 4、单例模式
概述:保证类在内存中只有一个对象
1)饿汉式
public class Student {
private final static Student s = new Student();
private Student() {
super();
}
public static Student get(){
return s;
}
}


2)懒汉式

public class Teacher {
private static Teacher t = null;
public Teacher() {
super();
}
public static Teacher get(){
if(t == null){
t = new Teacher();
}
return t;
}
}


3)Runtime类(单例模式的实现)
概述:每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime方法获取当前运行时对象。
public Process exec(String command)执行Dos命令
5、模版设计模式
1)概述:定义一个算法的骨架,而将具体的算法延迟到子类中来实现
2)实现:
public abstract class GetTime {
public long getTime(){
long startTime = System.currentTimeMillis();
work();	//一些耗时操作
long endTime = System.currentTimeMillis();
return endTime - startTime;
}
public abstract void work();
}

public class ExtendsGet extends GetTime{
@Override
public void work() {
for(int i = 0;i < 1000;i ++){
System.out.print(i);
}
System.out.println();
}
}

public class Test {
public static void main(String[] args) {
ExtendsGet eg = new ExtendsGet();
long time = eg.getTime();
System.out.println(time);
}
}


6、装饰模式
1)概述:使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案
2)实现:(IO流中将File包装成一个高效字符流)
public interface Phone {
void call();
}

public class CallPhone implements Phone{
@Override
public void call() {
System.out.println("打电话");
}
}

public class PhoneDecorate extends CallPhone{
private Phone phone;
public PhoneDecorate(Phone phone) {
super();
this.phone = phone;
}
@Override
public void call() {
phone.call();
}
}

public class MusicPhone extends PhoneDecorate{
public MusicPhone(Phone phone) {
super(phone);
}
@Override
public void call() {
super.call();
System.out.println("听音乐");
}
}

public class VideoPhone extends PhoneDecorate{
public VideoPhone(Phone phone) {
super(phone);
}
@Override
public void call() {
super.call();
System.out.println("看视频");
}
}

public class Test {
public static void main(String[] args) {
new VideoPhone(new MusicPhone(new CallPhone())).call();
}
}


7、观察者模式
1)概述:一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象;
2)实现:
public class WorkMan {
String Manname;
public WorkMan(String manname) {
super();
Manname = manname;
}
}

public class Job {
String jobname;
int jobmoney;
public Job(String jobname, int jobmoney) {
super();
this.jobname = jobname;
this.jobmoney = jobmoney;
}
}

public class Headhunter {
private ArrayList<Job> jobal = new ArrayList<>();
private ArrayList<WorkMan> manal = new ArrayList<>();

public void addWorkMan(WorkMan wm){
manal.add(wm);
}
public void delWorkMan(WorkMan wm){
manal.remove(wm);
}
public void addJob(Job job){
jobal.add(job);
sent(job);
}
public void delJob(Job job){
jobal.remove(job);
}
private void sent(Job job) {
for(WorkMan wm : manal){
System.out.println(wm.Manname + ",你好!有份" + job.jobname
+ "的工作,薪资" + job.jobmoney + "元,有意者请及时面试");
}
}
}

public class Test {
public static void main(String[] args) {
Headhunter headhunter = new Headhunter();
WorkMan wm1 = new WorkMan("张三");
WorkMan wm2 = new WorkMan("李四");
WorkMan wm3 = new WorkMan("王五");
headhunter.addWorkMan(wm1);
headhunter.addWorkMan(wm2);
headhunter.addWorkMan(wm3);
Job job1 = new Job("司机", 8000);
Job job2 = new Job("保姆", 9000);
Job job3 = new Job("清洁员", 6000);
headhunter.addJob(job1);
headhunter.addJob(job2);
headhunter.addJob(job3);
headhunter.delWorkMan(wm3);
headhunter.delJob(job3);
headhunter.addWorkMan(new WorkMan("赵六"));
headhunter.addJob(new Job("保安", 7000));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息