Java后端笔记18
程序员文章站
2022-03-05 13:05:12
...
设计模式
import com.xiye.bean.Camera;
import com.xiye.bean.MySingleMode;
import com.xiye.bean.MyTemplateModeChild;
import com.xiye.factory.impl.AppleFactory;
import com.xiye.factory.impl.PearFactory;
import com.xiye.service.Fruit;
/**
* Create by xiye on 2019/12/11 11:42
*/
public class Demo2_设计模式 {
/*设计模式
* 装饰设计模式:不改变原对象,新的对象扩展原对象没有的一些属性、方法。
* 其实就是在新的对象中引入原对象作为其属性,新对象在定义自己新的方法、属性之类的
* 单例模式:创建单实例
* 饿汉式:间接获取实例,不直接通过new的方式创建获取。缺点是无论是否使用,都会创建实例
* 懒汉式:优化饿汉式的缺点,就是用的时候再实例一个对象。缺点是存在线程隐患。
* 登记式:优化懒汉式的缺点
* 模板设计模式
* 工厂设计模式:目的实现解耦
* 适配器设计模式:就是适配器抽象类实现某个接口,并实现接口的部分抽象方法,
* 这些方法是具体的类不需要的,之后具体类继承适配器抽象类,
* 实现适配器抽象类没有实现的抽象方法即可(就是实现具体类想要的方法)
* 策略设计模式、代理设计模式。。。
*
* */
public static void main(String[] args) {
//singleMode();
templateMode();
//factoryMode();
//adapterMode();
}
private static void adapterMode() {
Camera camera = new Camera();
camera.photo();
}
private static void factoryMode() {
AppleFactory appleFactory = new AppleFactory();
Fruit apple = appleFactory.createFactory();
apple.show();
PearFactory pearFactory = new PearFactory();
Fruit pear = pearFactory.createFactory();
pear.show();
}
private static void singleMode() {
MySingleMode instance = MySingleMode.getInstance();
System.out.println(instance.hashCode());
//instance.test();
MySingleMode instance1 = MySingleMode.getInstance();
//instance1.test();
System.out.println(instance1.hashCode());
}
private static void templateMode() {
MyTemplateModeChild mtmc = new MyTemplateModeChild();
// 调用功能方法,这个就是功能模板
mtmc.common();
}
}
单例模式
package com.xiye.bean;
/**
* Create by xiye on 2019/12/11 12:05
*/
public class MySingleMode {
private MySingleMode(){} // 私有防止被访问
/*// 单例模式——饿汉式
// 无论是否使用,都会创建一个实例
private static MySingleMode singleMode = new MySingleMode();
public static MySingleMode getInstance() {
return singleMode;
}
public void test() {
System.out.println("单例模式——饿汉式");
}*/
/*
// 单例模式——懒汉式
private static MySingleMode singleMode;
public static MySingleMode getInstance() {
if (singleMode == null) {
// 优化饿汉式,使用时才会创建实例
singleMode = new MySingleMode();
}
return singleMode;
}
public void test() {
System.out.println("单例模式——懒汉式");
}*/
// 单例模式——登记式:解决懒汉式线程隐患问题??????
private static class InnerClass {
private static final MySingleMode SINGLE_MODE = new MySingleMode();
}
public static MySingleMode getInstance() {
// 是否是因为每次都新建一个对象,所以线程安全???
return InnerClass.SINGLE_MODE;
}
public void test() {
System.out.println("单例模式——登记式");
}
}
模板模式
模板
package com.xiye.bean;
/**
* Create by xiye on 2019/12/11 15:12
*/
public abstract class MyTemplateMode {
// 模板功能块
public final void common() {
study();
work();
love();
}
/*
* 学习要认真
* */
public void study(){
System.out.println("学习拔尖,综合优秀");
}
/*
* 工作要做好
* */
public void work(){
System.out.println("工作兢兢业业");
}
/*
* 爱情是*的
* */
public abstract void love();
}
子类继承并重写部分方法
package com.xiye.bean;
/**
* Create by xiye on 2019/12/11 15:17
*/
public class MyTemplateModeChild extends MyTemplateMode {
@Override
public void love() {
System.out.println("爱情永恒不变");
}
@Override
public void study() {
System.out.println("学习够用就行");
}
}
工厂模式
定义水果接口
package com.xiye.service;
/**
* Create by xiye on 2019/12/11 15:29
*/
public interface Fruit {
void show();
}
实现接口
package com.xiye.service.impl;
import com.xiye.service.Fruit;
/**
* Create by xiye on 2019/12/11 15:32
*/
public class Apple implements Fruit {
@Override
public void show() {
System.out.println("我是????");
}
}
package com.xiye.service.impl;
import com.xiye.service.Fruit;
/**
* Create by xiye on 2019/12/11 15:32
*/
public class Pear implements Fruit {
@Override
public void show() {
System.out.println("我是梨");
}
}
定义水果工厂接口
package com.xiye.factory;
import com.xiye.service.Fruit;
/**
* Create by xiye on 2019/12/11 15:29
*/
public interface FruitFactory {
Fruit createFactory();
}
实现工厂接口,每个工厂生成(创建)自己的对象
package com.xiye.factory.impl;
import com.xiye.factory.FruitFactory;
import com.xiye.service.Fruit;
import com.xiye.service.impl.Apple;
/**
* Create by xiye on 2019/12/11 15:31
*/
public class AppleFactory implements FruitFactory {
@Override
public Fruit createFactory() {
return new Apple();
}
}
package com.xiye.factory.impl;
import com.xiye.factory.FruitFactory;
import com.xiye.service.Fruit;
import com.xiye.service.impl.Apple;
import com.xiye.service.impl.Pear;
/**
* Create by xiye on 2019/12/11 15:31
*/
public class PearFactory implements FruitFactory {
@Override
public Fruit createFactory() {
return new Pear();
}
}
适配器模式
定义电子接口
package com.xiye.factory;
/**
* Create by xiye on 2019/12/11 16:28
*/
public interface Electronics {
void music();
void game();
void call();
void photo();
}
定义适配器抽象类,去除具体类不需要的功能
package com.xiye.bean;
import com.xiye.factory.Electronics;
/**
* Create by xiye on 2019/12/11 16:27
*/
public abstract class CameraAdapter implements Electronics {
/*
* 实现照相机不需要的功能方法
* */
@Override
public void music() {
}
@Override
public void game() {
}
@Override
public void call() {
}
}
定义具体类,继承对应适配器,只需实现自己该有的功能
package com.xiye.bean;
/**
* Create by xiye on 2019/12/11 16:33
*/
public class Camera extends CameraAdapter {
@Override
public void photo() {
System.out.println("照相机只能拍照啦");
}
}
上一篇: C 学习
下一篇: 端口扫描是什么意思?
推荐阅读
-
java开发接口怎么写(java后端接口开发详细教程)
-
java学习笔记(中级篇)—java实现高质量图片压缩
-
Bootstrap table学习笔记(2) 前后端分页模糊查询
-
索尼EG18笔记拆机的详细步骤(图文教程)(包括换硬盘,cpu清理风扇)
-
java 学习笔记(入门篇)_多选择结构switch语句
-
java 学习笔记(入门篇)_java的基础语法
-
Java开发笔记(一百二十六)Swing的窗口
-
Java学习笔记(6)---正则表达式,方法
-
Java学习笔记(5)--- Number类和Math 类,String类的应用,Java数组入门
-
详解Docker学习笔记之搭建一个JAVA Tomcat运行环境