欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:Java設(shè)計(jì)模式以及代理模式

柚子快報(bào)激活碼778899分享:Java設(shè)計(jì)模式以及代理模式

http://yzkb.51969.com/

一、設(shè)計(jì)模式

1.JAVA六大設(shè)計(jì)原則

JAVA設(shè)計(jì)模式提供六個(gè)基本原則,分別是:

開(kāi)閉原則(OCP) - The Open-Closed Principle單一職責(zé)原則(SRP) - Single Responsibility Principle里氏替換原則(LSP) - Liskov Substitution Principle依賴(lài)倒置原則(DIP) - Dependency Inversion Principle接口隔離原則(ISP) - Interface Segregation Principle迪米特法則(DP) - Demeter Principle

2.JAVA23種設(shè)計(jì)模式

在軟件工程當(dāng)中,設(shè)計(jì)原則和設(shè)計(jì)模式是不同的.

3.設(shè)計(jì)原則

設(shè)計(jì)原則是為了更好的設(shè)計(jì)軟件的高層指導(dǎo)方針. 

它不提供具體的實(shí)現(xiàn)方式也不會(huì)綁定任何一種編程語(yǔ)言.  

最常用的原則是SOLID(SRP, OCP, LSP, ISP, DIP)原則

4.設(shè)計(jì)模式

設(shè)計(jì)模式對(duì)關(guān)于面向?qū)ο髥?wèn)題的具體解決方案.

比如說(shuō), 如果你想創(chuàng)建一個(gè)類(lèi)而且它在任何時(shí)刻只會(huì)有一個(gè)對(duì)象,那么你就應(yīng)該使用單例類(lèi)模式.

設(shè)計(jì)模式是經(jīng)過(guò)大量檢測(cè)的安全的做法.

4.1 工廠(chǎng)模式(factory)

案例:

INoodles:

package com.ztt.test;

public interface INoodles {

public void noodleType();

}

LanZhouLaMianImp:

package com.ztt.test;

public class LanZhouLaMianImp implements INoodles{

@Override

public void noodleType() {

System.out.println("========來(lái)一碗蘭州拉面========");

}

}

ReGanMianNoodleImp:

package com.ztt.test;

public class ReGanMianNoodleImp implements INoodles{

@Override

public void noodleType() {

System.out.println("========來(lái)一碗武漢熱干面========");

}

}

YouPoMianNoodleImp:

package com.ztt.test;

public class YouPoMianNoodleImp implements INoodles{

@Override

public void noodleType() {

System.out.println("========來(lái)一碗油潑面========");

}

}

NoodleFactory:

package com.ztt.test;

/**

* 面長(zhǎng)

* */

public class NoodleFactory {

/**

* 規(guī)范下面條類(lèi)型

* */

public static final int NOODLE_YOUPO = 1;

public static final int NOODLE_REGAN = 2;

public static final int NOODLE_LANZHOULA = 3;

/**

*創(chuàng)建面條

**/

public static INoodles getNoodle(int type){

if (type == 1){

return new YouPoMianNoodleImp();

}else if(type ==2){

return new ReGanMianNoodleImp();

}else if(type ==3 ){

return new LanZhouLaMianImp();

}

return null;

}

}

package com.ztt.test;

public class Test01 {

public static void main(String[] args) {

NoodleFactory.getNoodle(NoodleFactory.NOODLE_LANZHOULA).noodleType();

NoodleFactory.getNoodle(3).noodleType();

}

}

4.2 單列設(shè)計(jì)模式(singlton)

餓漢式:

package com.ztt.hungrytest;

/**

* 餓漢式

* */

public class Student {

//3.創(chuàng)建static修飾的成員變量

private static Student stu = new Student();

//1.設(shè)計(jì)私有構(gòu)造方法

private Student(){

super();

}

//2.提供共有的方法

public static synchronized Student getInstance(){

return stu;

}

}

package com.ztt.hungrytest;

import com.ztt.lazytest.Student;

public class Test03 {

public static void main(String[] args) {

com.ztt.lazytest.Student stu1 = com.ztt.lazytest.Student.getInstance();

Student stu2 = Student.getInstance();

System.out.println(stu1== stu2);

}

}

懶漢式:

package com.ztt.lazytest;

/**

* 懶漢式

* */

public class Student {

//3.創(chuàng)建static修飾的成員變量

private static Student stu;

//1.設(shè)計(jì)私有構(gòu)造方法

private Student(){

super();

}

//2.提供共有的方法

public static synchronized Student getInstance(){

if(stu == null){

stu = new Student();

}

return stu;

}

}

package com.ztt.lazytest;

public class Test02 {

public static void main(String[] args) {

Student stu1 = Student.getInstance();

Student stu2 = Student.getInstance();

System.out.println(stu1== stu2);

}

}

六、代理模式

1.什么是代理模式?

代理模式給某一個(gè)對(duì)象提供一個(gè)代理對(duì)象,并由代理對(duì)象控制對(duì)原對(duì)象的引用。通俗的來(lái)講代理模式就是我們生活中常見(jiàn)的中介。舉個(gè)例子來(lái)說(shuō)明:假如說(shuō)我現(xiàn)在想買(mǎi)一輛二手車(chē),雖然我可以自己去找車(chē)源,做質(zhì)量檢測(cè)等一系列的車(chē)輛過(guò)戶(hù)流程,但是這確實(shí)太浪費(fèi)我得時(shí)間和精力了。我只是想買(mǎi)一輛車(chē)而已為什么我還要額外做這么多事呢?于是我就通過(guò)中介公司來(lái)買(mǎi)車(chē),他們來(lái)給我找車(chē)源,幫我辦理車(chē)輛過(guò)戶(hù)流程,我只是負(fù)責(zé)選擇自己喜歡的車(chē),然后付錢(qián)就可以了。

2.為什么要用代理模式?

2.1 中介隔離作用:

在某些情況下,一個(gè)客戶(hù)類(lèi)不想或者不能直接引用一個(gè)委托對(duì)象,而代理類(lèi)對(duì)象可以在客戶(hù)類(lèi)和委托對(duì)象之間起到中介的作用,其特征是代理類(lèi)和委托類(lèi)實(shí)現(xiàn)相同的接口。

2.2 開(kāi)閉原則,增加功能:

代理類(lèi)除了是客戶(hù)類(lèi)和委托類(lèi)的中介之外,我們還可以通過(guò)給代理類(lèi)增加額外的功能來(lái)擴(kuò)展委托類(lèi)的功能,這樣做我們只需要修改代理類(lèi)而不需要再修改委托類(lèi),符合代碼設(shè)計(jì)的開(kāi)閉原則。

3.有哪幾種代理模式?

我們有多種不同的方式來(lái)實(shí)現(xiàn)代理。如果按照代理創(chuàng)建的時(shí)期來(lái)進(jìn)行分類(lèi)的話(huà)可以分為兩種:

3.1 靜態(tài)代理:

靜態(tài)代理是由程序員創(chuàng)建或特定工具自動(dòng)生成源代碼,在對(duì)其編譯。

在程序員運(yùn)行之前,代理類(lèi).class文件就已經(jīng)被創(chuàng)建了。

靜態(tài)代理案例:

package com.ztt.statictest;

public interface IWonman {

public void makeEyeWithMan();

}

package com.ztt.statictest;

public class PanJinLianImp implements IWonman{

@Override

public void makeEyeWithMan() {

System.out.println("回眸一笑,拋個(gè)媚眼~");

}

}

package com.ztt.statictest;

//代理

public class WangPoImp implements IWonman{

//被代理對(duì)象

IWonman obj;

public WangPoImp(IWonman obj) {

this.obj = obj;

}

@Override

public void makeEyeWithMan() {

System.out.println("鎮(zhèn)一壺酒,搞搞氣氛~");

obj.makeEyeWithMan();

}

}

package com.ztt.statictest;

public class XiMenQingTest {

public static void main(String[] args) {

//1.創(chuàng)建被代理對(duì)象

IWonman pan = new PanJinLianImp();

//2.創(chuàng)建代理

IWonman wang = new WangPoImp(pan);

wang.makeEyeWithMan();

}

}

3.2 動(dòng)態(tài)代理:

動(dòng)態(tài)代理是在程序運(yùn)行時(shí)通過(guò)反射機(jī)制動(dòng)態(tài)創(chuàng)建的。

動(dòng)態(tài)代理分為:

基于接口的動(dòng)態(tài)代理(jdk自帶)

基于子類(lèi)的動(dòng)態(tài)代理(第三方)

3.2.1 動(dòng)態(tài)代理jdk自帶的案例:

package com.ztt.jdktest;

/**

* @author 甜甜

* @version 1.0

* @since 2024/8/8

*/

public interface ISinger {

public void sing();

public int dance(int num);

}

package com.ztt.jdktest;

/**

* @author 甜甜

* @version 1.0

* @since 2024/8/8

*/

public class XuezhiqianImp implements ISinger{

@Override

public void sing() {

System.out.println("唱歌");

}

@Override

public int dance(int num) {

System.out.println("跳舞");

return 0;

}

}

package com.ztt.jdktest;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

/**

* @author 甜甜

* @version 1.0

* @since 2024/8/8

*/

public class Test01 {

public static void main(String[] args) {

//1.創(chuàng)建被代理對(duì)象

final ISinger xue = new XuezhiqianImp();

//2.創(chuàng)建代理對(duì)象

ISinger jingJiRen = (ISinger) Proxy.newProxyInstance(xue.getClass().getClassLoader(), xue.getClass().getInterfaces(), new InvocationHandler() {

@Override

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

System.out.println("===做個(gè)自我介紹===");

Object obj = method.invoke(xue,args);

return obj;

}

});

jingJiRen.sing();

//jingJiRen.dance(6);

}

}

3.2.2 動(dòng)態(tài)代理第三方案例:

① 導(dǎo)入坐標(biāo)

cglib

cglib

2.2.2

② 代碼展示:

package com.ztt.cglibtest;

/**

* @author 甜甜

* @version 1.0

* @since 2024/8/8

*/

public interface ISinger {

public void sing();

}

package com.ztt.cglibtest;

/**

* @author 甜甜

* @version 1.0

* @since 2024/8/8

*/

public class TengGeErImp implements ISinger{

@Override

public void sing() {

System.out.println("聽(tīng)了趙雷的成都去了成都,聽(tīng)了汪峰的北京去了北京,至今不敢聽(tīng)騰格爾的天堂~");

}

}

package com.ztt.cglibtest;

import net.sf.cglib.proxy.Enhancer;

import net.sf.cglib.proxy.InvocationHandler;

import java.lang.reflect.Method;

/**

* @author 甜甜

* @version 1.0

* @since 2024/8/8

*/

public class Test02 {

public static void main(String[] args) {

//創(chuàng)建被代理對(duì)象

final ISinger teng = new TengGeErImp();

//創(chuàng)建代理對(duì)象

ISinger jing=(ISinger) Enhancer.create(teng.getClass(), teng.getClass().getInterfaces(), new InvocationHandler() {

@Override

public Object invoke(Object o, Method method, Object[] objects) throws Throwable {

Object object = method.invoke(teng,objects);

return object;

}

});

jing.sing();

}

}

柚子快報(bào)激活碼778899分享:Java設(shè)計(jì)模式以及代理模式

http://yzkb.51969.com/

推薦文章

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19339230.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪(fǎng)問(wèn)

文章目錄